// 🎮 核心游戏引擎
export class GameEngine {
  private plugins: any[] = [];

  // 注册插件
  use(plugin: any) {
    this.plugins.push(plugin);
    if (plugin.init) {
      plugin.init(this); // 插件初始化
    }
  }

  // 核心功能：启动游戏
  start() {
    console.log("🚀 游戏启动！");
    this.trigger("onGameStart");
  }

  // 核心功能：打败敌人
  defeatEnemy() {
    console.log("💥 敌人被击败");
    this.trigger("onEnemyDefeated");
  }

  // 核心功能：结束游戏
  end() {
    console.log("🏁 游戏结束");
    this.trigger("onGameEnd");
  }

  // 事件分发给插件
  trigger(event: string, ...args: any[]) {
    for (const plugin of this.plugins) {
      if (typeof plugin[event] === "function") {
        plugin[event](...args);
      }
    }
  }
}

/* ========= 📦 插件 =========== */

// 日志插件
const Logger = {
  init() {
    console.log("📝 日志插件已启动");
  },
  onGameStart() {
    console.log("[Logger] 游戏开始了");
  },
  onEnemyDefeated() {
    console.log("[Logger] 玩家击败了一个敌人");
  },
  onGameEnd() {
    console.log("[Logger] 游戏结束了");
  },
};

// 音乐插件
const Music = {
  onGameStart() {
    console.log("🎶 播放背景音乐");
  },
  onGameEnd() {
    console.log("🔇 停止背景音乐");
  },
};

// 计分插件
const Score = {
  score: 0,
  onEnemyDefeated() {
    this.score += 10;
    console.log(`🏆 当前分数: ${this.score}`);
  },
};

/* ========= 🚀 使用 =========== */
const engine = new GameEngine();

// 注册插件
engine.use(Logger);
engine.use(Music);
engine.use(Score);

// 游戏流程
engine.start();       // 游戏开始
engine.defeatEnemy(); // 打败敌人
engine.defeatEnemy(); // 再打败一个敌人
engine.end();         // 游戏结束
